﻿using System;
using Xejen.Logger;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace Xejen.Hosting
{
    /// <summary>
    /// 表示应用程序主机
    /// </summary>
    /// <creator>marc</creator>
    public interface IAppHost
    {
        /// <summary>
        /// 正在配置IConfiguration中，您可以继续加入其它初始化工作，如加载其它的.json文件
        /// </summary>
        event EventHandler<IConfigurationBuilder> HostConfiguring;
        /// <summary>
        /// 主机的配置已完成且抽象接口IConfiguration已构建
        /// </summary>
        event EventHandler<IConfiguration> HostConfigurationInitialized;
        /// <summary>
        /// 主机正在构建服务中，您可以继续加入其它服务一起构建
        /// </summary>
        event EventHandler<IServiceCollection> HostServicesInitializing;
        /// <summary>
        /// 主机构建完成已准备就绪
        /// </summary>
        event EventHandler HostReady;

        /// <inheritdoc cref="HostConfiguration"/>
        HostConfiguration HostConfig { get; }
        /// <summary>
        /// 应用程序配置信息，默认加载appsettings.json文件
        /// </summary>
        IConfiguration Configuration { get; }
        /// <summary>
        /// 服务管理器
        /// </summary>
        IServiceProvider ServiceProvider { get; }
        /// <summary>
        /// 使用的日志管理器
        /// </summary>
        ILoggerManager LoggerManager { get; }

        /// <summary>
        /// 构建主机
        /// </summary>
        /// <returns></returns>
        IAppHost Build();
        /// <summary>
        /// 启动程序
        /// </summary>
        void Run();
    }
}
